基于qt+halcon实现视觉定位模板匹配【附部分源码】

您所在的位置:网站首页 halcon 软件的源码 基于qt+halcon实现视觉定位模板匹配【附部分源码】

基于qt+halcon实现视觉定位模板匹配【附部分源码】

2024-07-10 18:34| 来源: 网络整理| 查看: 265

文章目录 前言演示视频一、项目文件目录讲解二、Qt Designer设置ui界面1.CtuImageMatching.ui界面详解2.CameraSetting.ui的设置3.Calibration.ui的设置4.Helper.ui的设置 三、文件算法解析1.CameraSetting.cpp重要函数解析1.首先定义好相机设置的初始化2.查找相机3.连接相机4.获取相机参数5.设置相机参数6.获取图像,送到外部 2.Calibration.cpp重要函数解析1.生成标定文件2.根据标定文件转化数据 3.CtuImageMatching.cpp重要函数解析1.初始化主窗体halcon2.鼠标移动到图像上获取像素和颜色3.载入图像4.保存图像5.ROI绘制,以矩形为例6.创建模板7.查找模板结果8.读取条形码9.读取二维码10.读取OCR 总结

前言

本文主要实现基于qt5.3做一个视觉定位识别的功能,halcon版本使用的是halcon12.0,调用halcon的dll来实现二次开发,下边从头开始设置。 与前面的python版、MFC版、Qt版一样,可供不同的开发者进行学习使用。 编程环境:qt5.3 halcon12.0 IDE: VisualStudio 2010

演示视频

本次项目的效果视频:

基于qt调用halcon实现图像定位,模板匹配

一、项目文件目录讲解

在这里插入图片描述 本解决方案有3个项目工程,包括软件,验证加密,解密工程,本文主要讲解的是CtuImageMatching项目 1、Calibration.cpp、Calibration.h:此类主要是相机标定的逻辑 2、CameraSetting.cpp、CameraSetting.h:此类主要是相机设置的逻辑 3、CtuImageMatching.cpp、CtuImageMatching.h:整个软件的主逻辑计算 4、Helper.cpp、Helper.h:帮助页面 5、QtTcpServerLib.cpp、QtTcpServerLib.h:标准的TCP服务器类 6、QtThread.cpp、QtThread.h:标准的线程类 7、SoftEncryption.cpp、SoftEncryption.h:标准的加密算法类 注意:5、6、7是自己进行封装方便自己使用的类

二、Qt Designer设置ui界面

一下界面只需要用Qt Designer进行编辑即可,基本上不需要代码部分

1.CtuImageMatching.ui界面详解

先上图,只需要按照这个来设置即可: 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 从主界面上可以看出,本视觉软件所具有的功能。

2.CameraSetting.ui的设置

先上图,只需要按照这个来设置即可: 在这里插入图片描述 从界面上可以看出,本相机设置具有的功能。

3.Calibration.ui的设置

先上图,只需要按照这个来设置即可: 在这里插入图片描述 从界面上可以看出,本标定设置具有的功能。

4.Helper.ui的设置

先上图,只需要按照这个来设置即可: 在这里插入图片描述 从界面上可以看出,本帮助界面具有的功能,这里暂时就一个QLabel用来放了个二维码。

三、文件算法解析 1.CameraSetting.cpp重要函数解析 1.首先定义好相机设置的初始化 CameraSetting::CameraSetting(QString Path,QWidget *parent) : QDialog(parent) { ui.setupUi(this); FilePath = Path; //this->setWindowIcon(QIcon(":/CtuImageMatching/Resources/29.ico")); ReadIni(); OpenCarmerFlag=false; GetPictureFlag = false; ROIFlag = false; SetWindowAttr("background_color","black"); //设置背景颜色 Hlong winID = (Hlong) ui.Lab_HShowWindow->winId(); OpenWindow(0,0,ui.Lab_HShowWindow->geometry().width(),ui.Lab_HShowWindow->geometry().height(),winID,"","",&hv_WindowHandle); //显示那个框,获得句柄 HDevWindowStack::Push(hv_WindowHandle); if (HDevWindowStack::IsOpen()) //判断窗口是否打开了 { SetColor(hv_WindowHandle,"red"); SetDraw(hv_WindowHandle,"margin"); SetLineWidth(hv_WindowHandle,1); } workerThread = new QtThread(this); workertimer = new QTimer(this); connect(workertimer, SIGNAL(timeout()), this, SLOT(TenLine())); ctu = this; //on_Btn_SertchCarmer_clicked(); } 2.查找相机

这里有三种相机接口类型,分别是:DirectShow、GigEVision、GenICamTL

void CameraSetting::on_Btn_SertchCarmer_clicked() { const HTuple Name, Query; HTuple Information,ValueList, info_BoardsList, hv_Length; HTuple deviceNames; switch(CarmerType.toInt()) { case -1: return; case 0: deviceNames = "DirectShow"; break; case 1: deviceNames = "GigEVision"; break; case 2: deviceNames = "GenICamTL"; break; } QStringList CarmerList; try{ HalconCpp::InfoFramegrabber(deviceNames,"device",&Information,&ValueList); HalconCpp::TupleLength(ValueList,&hv_Length); int length1 = (int)hv_Length[0]; for(int i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3